/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Christopher
 */
import java.util.ArrayList;
import java.util.LinkedList;
public class Lista <E> extends AbstractPila<E> {
    
    private LinkedList<E> pila = new LinkedList<E>();
    private int apun;

    public Lista(){
       this.apun = 0;
    } 
    
   /**
   * pre: obtiene la referencia apun.
   * post: cambia la referencia del apun a una posicion nueva mandada como
   * parametro.
   * @param apun
   * 
   */
    public void setApun(int apun){
       this.apun = apun;
    }
   
    /**
   * pre: obtiene el valor actual del apuntador
   * post: devuelve el valor actual del apuntador
   * @return int
   * 
   */
    public int getApun(){
       return apun;
    }
    
    /**
    * pre: lista con elementos
    * post: si existe un elemento devuelve el valor del ultimo elemento agregado
    * a la lista sin eliminar el elemento de la lista.
    * @return E
    *  
    */
    @Override
    public E peek(){
        E elemento;
        this.apun--;
        elemento = pila.get(apun);
        this.apun++;
        return elemento;     
    }
    
    /**
    * pre: lista con elementos
    * post: si existe un elemento devuelve el valor del último elemento agregado
    * eliminando el mismo elemento de la lista. 
    * @return E
    */
    @Override
    public E pop() {
        E elemento;
        this.apun --;
        elemento = pila.get(apun);
        pila.remove(apun);
        return elemento;
    }

    /**
    * pre: lista simplemente encadenada con o sin elementos
    * post: agrega un elemento a la lista en la posicion del head. 
    * @param item
    * @return void
    */

    @Override
    public void push(E item) {
        
        pila.add(item);
        this.apun ++;
    }

   /**
   * pre: lista de elementos
   * post: devuelve un String con una breve descripción de la lista 
   * @return String
   */
    @Override
   public String toString(){
       String desc = " ";
       for(int x = 0 ;x<pila.size() ;x++){
           desc += pila.get(x) + " " ;
       }
           return desc;
   }
    
}
